//! 辅助工具方法
use time::{macros::format_description, Date, OffsetDateTime, Time};

use crate::err::{OrmError, OrmResult};

/// 从字符串解析日期
///
/// # 参数说明
///
/// * input 待解析为日期的字符串 格式  YYYY-MM-DD
pub fn parse_date(input: &str) -> OrmResult<Date> {
    let format = format_description!("[year]-[month]-[day]");
    Date::parse(input, &format)
        .map_err(|err| OrmError::DateTimeParseFail("日期格式必须为YYYY-MM-DD".into()))
}

/// 从字符串解析时间
///
/// # 参数说明
///
/// * input 待解析为时间的字符串 格式  HH:MM:SS
pub fn parse_time(input: &str) -> OrmResult<Time> {
    let format = format_description!("[hour]:[minute]:[second]");
    Time::parse(input, &format)
        .map_err(|err| OrmError::DateTimeParseFail("时间格式必须为HH:MM:SS".into()))
}

/// 从字符串解析日期时间
///
/// # 参数说明
///
/// * input 待解析为日期时间的字符串 格式  YYYY-MM-DD HH:MM:SS
pub fn parse_datetime(input: &str) -> OrmResult<OffsetDateTime> {
    let format = format_description!("[year]-[month]-[day] [hour]:[minute]:[second]");
    OffsetDateTime::parse(input, &format)
        .map_err(|err| OrmError::DateTimeParseFail("日期时间格式必须为YYYY-MM-DD HH:MM:SS".into()))
}
